package com.baymax.test.scene.demo

import android.graphics.Rect
import android.os.Build
import android.os.Bundle
import android.text.Layout
import android.text.StaticLayout
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import com.baymax.test.scene.BaseScene
import com.baymax.test.scene.addButton
import com.baymax.test.scene.addText
import com.baymax.test.scene.newSceneFlexContainer
import com.google.android.flexbox.FlexboxLayout
import io.noties.markwon.Markwon
import io.noties.markwon.core.CorePlugin
import io.noties.markwon.ext.strikethrough.StrikethroughPlugin
import io.noties.markwon.ext.tables.TablePlugin
import io.noties.markwon.html.HtmlPlugin

class MarkDownDemo : BaseScene() {
    val md = """
        我们理解您需要更便捷更高效的工具记录思想，整理笔记、知识，并将其中承载的价值传播给他人，**Cmd Markdown** 是我们给出的答案 —— 我们为记录思想和分享知识提供更专业的工具。 您可以使用 Cmd Markdown：

        > * 整理知识，学习笔记
        > * 发布日记，杂文，所见所想
        > * 撰写发布技术文稿（代码支持）
        > * 绘制发布各类图表（十九种图表支持）
        > * 撰写发布学术论文（LaTeX 公式支持）
        > * 利用 AI 辅助写作（可切换大模型）

        ![cmd-markdown-logo](https://www.zybuluo.com/static/img/logo.png)
    """.trimIndent()
    val mdPlugin: Markwon by lazy {
        Markwon.builder(requireSceneContext())
            .usePlugin(CorePlugin.create())
            .usePlugin(HtmlPlugin.create())
            .usePlugin(StrikethroughPlugin.create())
            .usePlugin(TablePlugin.create(requireSceneContext()))
            .build()
    }

    override fun onCreateView(p0: LayoutInflater, p1: ViewGroup, p2: Bundle?): View {
        return p1.newSceneFlexContainer {

            val tv = object : TextView(requireSceneContext()) {
                override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
                    super.onMeasure(widthMeasureSpec, heightMeasureSpec)
                    Int.MAX_VALUE
                    println("onMeasure ${widthMeasureSpec}-${heightMeasureSpec} , ${measuredWidth} ,${measuredHeight}")

                }
            }
            tv.text = md
            addView(tv)

            addButton("to MarkDown") {
                tv.text = mdPlugin.toMarkdown(md)
            }
            addButton("to render") {
                tv.text = mdPlugin.parse(md).toString()
            }
            addButton("to Normal") {
                tv.text = md
            }
            addButton("show h w") {
//                val mdText = mdPlugin.toMarkdown(md)
//                val lt = measureSpanTextHeight(mdText , tv)
//                println("text height ${lt.width}-${lt.height} , ${tv.width}-${tv.height}-${tv.layout}-${tv.layout.width}-${tv.layout.height}")
//                val tvlt = tv.layout as StaticLayout
//                println("$tvlt")
            }

            addButton("test measure") {
                val wm = View.MeasureSpec.AT_MOST  or 500
                val hm = View.MeasureSpec.UNSPECIFIED  or 1000
                tv.measure(wm, hm)
                (tv.layoutParams as FlexboxLayout.LayoutParams).apply {
                    width = 500
                }
            }


        }
    }
}